const fs = require('fs')
const path = require('path')

// 响应
function response(res, content, type = 'json') {
  res.type(type) // 设置返回类型
  res.write(content) // 返回内容
  res.end() // 结束响应
}

// 读取数据
function mock(res, file) {
  fs.readFile(
    file,
    'utf8', // 编码格式
    (error, content) => {
      if (error) {
        response(res, error.message, 'html')
      }
      response(res, content, 'json')
    }
  )
}
// mock配置 ****
const mockMiddleware = (config) => (req, res, next) => {
  const {
    projectDir, // 项目根目录
    mockDir, // mock文件夹名称 './mock'
  } = config

  // 过滤静态资源
  if (['.html', '.css', '.js', '.png', '.jpg', 'ico'].includes(path.extname(req.path))) {
    return next() // 继续执行下一个中间件
  }
  const filePath = path.resolve(projectDir, `./${mockDir + req.path}.json`) // mock文件路径
  console.log('访问mock：', filePath)
  // 检查文件是否存在
  return fs.stat(filePath, (error) => {
    if (error) {
      next()
    } else {
      mock(res, filePath)
    }
  })
}

module.exports = mockMiddleware
